<template>
  <div>
    <p>
      var 声明提升使用这个关键字声明的变量会自动提升到函数作用域顶部。 let 跟
      var 的作用差不多，但有着非常重要的区别。最明显的区别是，let
      声明的范围是块作用域，而 var 声明的范围是函数作用域。
    </p>
    <p>
      const 声明的限制只适用于它指向的变量的引用。换句话说，如果 const
      变量引用的是一个对象，那么修改这个对象内部的属性并不违反 const 的限制。
    </p>
    <p>
      ECMAScript 有 6
      种简单数据类型（也称为原始类型）：Undefined、Null、Boolean、Number、
      String 和 Symbol。Symbol（符号）是 ECMAScript 6
      新增的。还有一种复杂数据类型叫 Object（对 象）。Object
      是一种无序名值对的集合。因为在 ECMAScript
      中不能定义自己的数据类型，所有值都可 以用上述 7 种数据类型之一来表示。只有
      7 种数据类型似乎不足以表示全部数据。但 ECMAScript 的数
      据类型很灵活，一种数据类型可以当作多种数据类型来使用。
    </p>
    <p>
      [Solved] structuredClone is not defined in JS and Node.js The
      "ReferenceError: structuredClone is not defined" error occurs when you use
      the structuredClone() method in an older Node.js environment. To solve the
      error, make sure you're running Node.js version 17 or greater.
    </p>
    <p>
      mac nuxt twilwind $ yarn add -D @nuxtjs/tailwindcss
      tailwindcss@npm:@tailwindcss/postcss7-compat @tailwindcss/postcss7-compat
      postcss@\^7 autoprefixer@\^9 yarn remove @nuxtjs/tailwindcss
      tailwindcss@npm:@tailwindcss/postcss7-compat @tailwindcss/postcss7-compat
      postcss@\^7 autoprefixer@\^9
    </p>
  </div>
</template>

<script lang="ts" setup>
// 6中基本数据类型
// Undefined 类型只有一个值，就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始 化时，就相当于给变量赋予了 undefined 值：
// 一般来说，永远不用显式地给某个变量设置 undefined 值。字面值 undefined 主要用于比较，而且在 ECMA-262 第 3 版之前是不存在的。增加这个特殊值的目的就是为 了正式明确空对象指针（null）和未初始化变量的区别。
// let undef;
// console.log(typeof undef);

// let num: number = 0;
// let str: string = "str";
// let isTrue: boolean = false;
// // Null 类型同样只有一个值，即特殊值 null。逻辑上讲，null 值表示一个空对象指针，这也是给 typeof 传一个 null 会返回"object"的原因
// let sig: null = null;
// console.log(0.1 + 0.2);
// console.log(Number.MIN_VALUE);
// console.log(Number.MAX_VALUE);
// console.log(5 / 0);
// console.log(5 / -0);
// console.log(0 / 0);
// console.log(parseInt("211这1个11"));

// let a = 10;
// let b = 20;
// function simpleTag(string: TemplateStringsArray, ...expressions: any) {
//   console.log(string);
//   for (const expression of expressions) {
//     console.log(expression);
//   }
//   return "foobar";
// }

// const res = simpleTag`${a} + ${b} = ${a + b}`;
// console.log(res);

// let sym1 = Symbol("");
// let sym2 = Symbol("id1");
// console.log(sym2.description);
// Symbol.for("foo");
// console.log(RegExp.prototype[Symbol.search]);
// let num2: number = 18;
// console.log(num2.toString(2));

// console.log(25 & 3);
// console.log(25 | 8);
// console.log(25 ^ 8);
// console.log(2 << 5);
// console.log(64 >> 5);
// let val1 = null;
// console.log(val1 && val1["name1"]);
// const val1 = 120;
// let num3: number = val1;
// let str3: string = "";
// while (num3 >= 2) {
//   let mol = num3 % 2;
//   str3 = mol + str3;
//   num3 = (num3 - mol) / 2;
// }
// str3 = num3 + str3;
// console.log(str3);
// console.log(val1.toString(2));

// console.log(10 % -Infinity);
// console.log(Math.pow(3, 2));
// console.log(4 ** 2);
// console.log("1" + 2 + 3);
// console.log(1 + 2 + "3");

// for (const progName in window) {
//   console.log(progName);
// }
// let count1 = 0;
// let count2 = 0;
// first: for (let i = 0; i < 10; i++) {
//   console.log("i" + i);

//   for (let j = 0; j < 10; j++) {
//     console.log("j" + j);

//     if (i == 5 && j == 5) {
//       break first;
//     }
//     count2++;
//   }
//   count1++;
// }
// console.log(count1);
// console.log(count2);

// let str: string = "cat, bat, sat, fat";
// let reg = /.at/gi;
// let matches = reg.exec(str);
// console.log(matches);
// matches = reg.exec(str);
// console.log(matches);

// matches = reg.exec(str);
// console.log(matches);
// matches = reg.exec(str);
// console.log(matches);

// matches = reg.exec(str);
// console.log(matches);
// console.log(Math.pow(2, 16));
</script>

<style></style>
